# Лекция: Spring Boot для тестировщика автоматизатора - @Value и application.properties

Spring Boot предоставляет возможность управлять конфигурацией приложения с помощью файла `application.properties` или `application.yml`. Эти файлы обычно находятся в каталоге `src/main/resources` проекта.

## application.properties

В файле `application.properties` вы можете определить различные свойства, такие как порт сервера, параметры базы данных, пользовательские настройки и многое другое.

```properties
server.port=8080
myapp.greeting=Hello, World!
```

## @Value

Аннотацию `@Value` можно использовать для внедрения значений из файла `application.properties` в ваши компоненты, сервисы или контроллеры.

```java
@Service
public class MyService {
    private final String greeting;

    @Autowired
    public MyService(@Value("${myapp.greeting}") String greeting) {
        this.greeting = greeting;
    }

    public String getGreeting() {
        return greeting;
    }
}
```

В этом примере значение свойства `myapp.greeting` из `application.properties` внедряется в `MyService` как `greeting`.

---

# Практические задания

1. **Создайте файл `application.properties` в каталоге `src/main/resources` вашего проекта Spring Boot.** (Сложность: 1/5)

2. **Добавьте свойство `myapp.greeting` со значением "Hello, World!" в `application.properties`.** (Сложность: 1/5)
```properties
myapp.greeting=Hello, World!
```

3. **Создайте класс `MyService` с аннотацией `@Service` и методом `getGreeting`, который возвращает значение свойства `myapp.greeting` из `application.properties`.** (Сложность: 2/5)
```java
@Service
public class MyService {
    private final String greeting;

    @Autowired
    public MyService(@Value("${myapp.greeting}") String greeting) {
        this.greeting = greeting;
    }

    public String getGreeting() {
        return greeting;
    }
}
```

4. **Создайте класс `MyController` с аннотацией `@RestController`, который использует `MyService` для обработки GET-запросов на URL "/greeting".** (Сложность: 2/5)
```java
@RestController
public class MyController {
    private final MyService myService;

    @Autowired
    public MyController(MyService myService) {
        this.myService = myService;
    }

    @GetMapping("/greeting")
    public String greeting() {
        return myService.getGreeting();
    }
}
```

5. **Создайте тестовый класс, который тестирует, что GET-запрос на URL "/greeting" возвращает строку "Hello, World!".** (Сложность: 3/5)
```java
@SpringBootTest
@AutoConfigureMockMvc
class MyControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @Test
    void shouldReturnDefaultMessage() throws Exception {
        this.mockMvc.perform(get("/greeting"))
                .andExpect(status().isOk())
                .andExpect(content().string("Hello, World!"));
    }

}
```